package com.controller;

import java.util.List;

import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

import com.tool.DatabaseTool;

public class SupCon {
	private static final String SPLIT_WORD = ","; // 分隔符

	/**
	 * 查询指定表内全部内容并以表格的形式返回
	 * 
	 * @param quaryName
	 *            需要查询的表格名字
	 * @return 返回一张JTable
	 */
	public JTable quaryReaderAll(String quaryName) {
		String sql = "select * from " + quaryName; // 查询语句
		List<String> list = DatabaseTool.doQuery(sql); // 取得查询结果
		Object obj[][] = new Object[list.size()][];
		JTable table = null; // 用来保存记录的JTable控件
		Object os[] = null; // 用来存放表头的数组
		os = tableHad(quaryName); // 获取表头
		if (list != null) { // 如果list为空则不执行操作
			for (int i = 0; i < list.size(); i++) {
				Object[] objs = list.get(i).split(SPLIT_WORD); // 获取其中的字段
				obj[i] = objs;
			}
			table = new JTable(new MyTableModel(obj, os)); // 新建表
		}
		return table;
	}

	/**	根据表名返回一张表的表头
	 * @param tableName	表名
	 * @return	表头
	 */
	private Object[] tableHad(String tableName) {
		Object os[] = null;
		if ("reader".equals(tableName)) {
			os = new Object[] { "读者编号", "读者用户", "读者密码", "丢失" }; // 读者表的表头
		} else if ("admin".equals(tableName)) {
			os = new Object[] { "管理员ID", "管理员帐号", "管理员密码" }; // 管理员表的表头
		} else if ("book".equals(tableName)) {
			os = new Object[] { "书籍编号", "书名", "种类", "价格", "数量", "出版社", "入库时间" };
		} else if("info".equals(tableName)){
			os = new Object[] { "公告编号", "公告标题","公告内容","发布时间","管理员名"};
		}else if("borrowed".equals(tableName)){
			os = new Object[] { "书籍编号", "书名", "种类", "价格", "数量", "出版社", "借书时间" };
		}
		return os;
	}

	/**
	 * 权限的修改，接收修改这的ID，以及要修改成的选择
	 * 
	 * @param id
	 *            被修改人的ID ID开头为1则是管理员，ID开头为2则是普通用户
	 * @param com
	 *            修改的标记，0为一般用户，1为管理员
	 * @return 返回修改结果
	 */
	public boolean updateCom(String id, int com) {
		String sql = ""; // sql语句
		boolean flag = false; // 查询结果，默认false
		if ("1".equals(id.substring(0, 1)) && com == 1) { // 如果要修改的是管理员，而修改后的还是管理员，则直接返回修改失败
			return false;
		}
		if ("2".equals(id.substring(0, 1)) && com == 0) { // 如果要修改的用户，而修改后的还是用户，则直接失败
			return false;
		}
		if ("1".equals(id.substring(0, 1))) { // 如果ID是管理员，要转换成一般用户
			sql = "select * from admin where a_id = " + id; // 生成管理员sql语句
			List<String> res = DatabaseTool.doQuery(sql); // 直接查询管理员表
			if (res.size() != 0) { // 查询成功
				String str = res.get(0); // 获取查询出的一条数据
				String[] strs = str.split(SPLIT_WORD); // 把每个字段分隔开来
				String r_name = strs[1]; // 转成用户名
				String r_pass = strs[2]; // 转成用户密码
				int r_mistake = 0;
				// 生成超长的sql插入语句
				String insertSql = "insert into reader(r_name,r_pass,r_mistake) values( '" + r_name + "','" + r_pass
						+ "'," + r_mistake + ");";
				int result = DatabaseTool.doInsert(insertSql); // 执行sql语句
				// 生成删除语句
				String deleteSql = "delete from admin where a_id = " + strs[0];
				int i = DatabaseTool.doDelete(deleteSql);
				if (result == 1 && i == 1) { // 如果2条修改都成功就返回true
					return true;
				}
			} else {
				return false;
			}
		} else if ("2".equals(id.substring(0, 1))) { // 如果是一般用户，要办成管理员
			sql = "select * from reader where r_id = " + id; // 生成读者sql语句
			List<String> res = DatabaseTool.doQuery(sql); // 直接查询管理员表
			if (res.size() != 0) { // 查询成功
				String str = res.get(0); // 获取查询出的一条数据
				String[] strs = str.split(SPLIT_WORD); // 把每个字段分隔开来
				String a_name = strs[1]; // 转成管理员名
				String a_pass = strs[2]; // 转成管理员密码
				int r_mistake = 0;
				// 生成超长的sql插入语句
				String insertSql = "insert into admin(a_name,a_pass) values( '" + a_name + "','" + a_pass + "');";
				int result = DatabaseTool.doInsert(insertSql); // 执行sql语句
				// 生成删除语句
				String deleteSql = "delete from reader where r_id = " + strs[0];
				int i = DatabaseTool.doDelete(deleteSql);
				if (result == 1 && i == 1) { // 如果2条修改都成功就返回true
					return true;
				}
			} else {
				return false;
			}
		}
		return false;
	}

	class MyTableModel extends DefaultTableModel {
		public MyTableModel(Object[][] obj, Object[] objs) { // 表的行列数
			super(obj, objs);
		}

		public boolean isCellEditable(int row, int column) { // 锁定所有格子
			return false;
		}
		
	}
}
